home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / GIMP 2.6.8 / gimp-2.6.8-i686-setup.exe / {app} / share / gimp / 2.0 / scripts / add-bevel.scm < prev    next >
Text File  |  2009-12-15  |  7KB  |  199 lines

  1. ; GIMP - The GNU Image Manipulation Program
  2. ; Copyright (C) 1995 Spencer Kimball and Peter Mattis
  3. ;
  4. ; add-bevel.scm version 1.04
  5. ; Time-stamp: <2004-02-09 17:07:06 simon>
  6. ;
  7. ; This program is free software; you can redistribute it and/or modify
  8. ; it under the terms of the GNU General Public License as published by
  9. ; the Free Software Foundation; either version 2 of the License, or
  10. ; (at your option) any later version.
  11. ;
  12. ; This program is distributed in the hope that it will be useful,
  13. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ; GNU General Public License for more details.
  16. ;
  17. ; You should have received a copy of the GNU General Public License
  18. ; along with this program; if not, write to the Free Software
  19. ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. ;
  21. ; Copyright (C) 1997 Andrew Donkin  (ard@cs.waikato.ac.nz)
  22. ; Contains code from add-shadow.scm by Sven Neumann
  23. ; (neumanns@uni-duesseldorf.de) (thanks Sven).
  24. ;
  25. ; Adds a bevel to an image.  See http://www.cs.waikato.ac.nz/~ard/gimp/
  26. ;
  27. ; If there is a selection, it is bevelled.
  28. ; Otherwise if there is an alpha channel, the selection is taken from it
  29. ; and bevelled.
  30. ; Otherwise the part of the layer inside the image boundries is bevelled.
  31. ;
  32. ; The selection is set on exit, so Select->Invert then Edit->Clear will
  33. ; leave a cut-out.  Then use Sven's add-shadow for that
  34. ; floating-bumpmapped-texture cliche.
  35.  
  36. ;
  37. ; 1.01: now works on offset layers.
  38. ; 1.02: has crop-pixel-border option to trim one pixel off each edge of the
  39. ;       bevelled image.  Bumpmapping leaves edge pixels unchanged, which
  40. ;       looks bad.  Oddly, this is not apparant in GIMP - you have to
  41. ;       save the image and load it into another viewer.  First noticed in
  42. ;       Nutscrape.
  43. ;       Changed path (removed "filters/").
  44. ; 1.03: adds one-pixel border before bumpmapping, and removes it after.
  45. ;       Got rid of the crop-pixel-border option (no longer reqd).
  46. ; 1.04: Fixed undo handling, ensure that bumpmap is big enough,
  47. ;       (instead of resizing the image). Removed references to outdated
  48. ;       bumpmap plugin.     (Simon)
  49. ; 1.05  When there is no selection, bevel the whole layer instead of the
  50. ;       whole image (which was broken in the first place).
  51. ;       Also fixed some bugs with setting the selection when there is no
  52. ;       initial selection.     (Barak Itkin)
  53. ;
  54.  
  55. (define (script-fu-add-bevel img
  56.                              drawable
  57.                              thickness
  58.                              work-on-copy
  59.                              keep-bump-layer)
  60.  
  61.   (let* (
  62.         (index 1)
  63.         (greyness 0)
  64.         (thickness (abs thickness))
  65.         (type (car (gimp-drawable-type-with-alpha drawable)))
  66.         (image (if (= work-on-copy TRUE) (car (gimp-image-duplicate img)) img))
  67.         (pic-layer (car (gimp-image-get-active-drawable image)))
  68.         (offsets (gimp-drawable-offsets pic-layer))
  69.         (width (car (gimp-drawable-width pic-layer)))
  70.         (height (car (gimp-drawable-height pic-layer)))
  71.  
  72.         ; Bumpmap has a one pixel border on each side
  73.         (bump-layer (car (gimp-layer-new image
  74.                                          (+ width 2)
  75.                                          (+ height 2)
  76.                                          RGB-IMAGE
  77.                                          "Bumpmap"
  78.                                          100
  79.                                          NORMAL-MODE)))
  80.  
  81.         (selection-exists (car (gimp-selection-bounds image)))
  82.         (selection 0)
  83.         )
  84.  
  85.     (gimp-context-push)
  86.  
  87.     ; disable undo on copy, start group otherwise
  88.     (if (= work-on-copy TRUE)
  89.       (gimp-image-undo-disable image)
  90.       (gimp-image-undo-group-start image)
  91.     )
  92.  
  93.     (gimp-image-add-layer image bump-layer 1)
  94.  
  95.     ; If the layer we're bevelling is offset from the image's origin, we
  96.     ; have to do the same to the bumpmap
  97.     (gimp-layer-set-offsets bump-layer (- (car offsets) 1)
  98.                                        (- (cadr offsets) 1))
  99.  
  100.     ;------------------------------------------------------------
  101.     ;
  102.     ; Set the selection to the area we want to bevel.
  103.     ;
  104.     (if (= selection-exists 0)
  105.         (gimp-selection-layer-alpha pic-layer)
  106.     )
  107.  
  108.     ; Store it for later.
  109.     (set! selection (car (gimp-selection-save image)))
  110.     ; Try to lose the jaggies
  111.     (gimp-selection-feather image 2)
  112.  
  113.     ;------------------------------------------------------------
  114.     ;
  115.     ; Initialise our bumpmap
  116.     ;
  117.     (gimp-context-set-background '(0 0 0))
  118.     (gimp-drawable-fill bump-layer BACKGROUND-FILL)
  119.  
  120.     (while (< index thickness)
  121.            (set! greyness (/ (* index 255) thickness))
  122.            (gimp-context-set-background (list greyness greyness greyness))
  123.            ;(gimp-selection-feather image 1) ;Stop the slopey jaggies?
  124.            (gimp-edit-bucket-fill bump-layer BG-BUCKET-FILL NORMAL-MODE
  125.                                   100 0 FALSE 0 0)
  126.            (gimp-selection-shrink image 1)
  127.            (set! index (+ index 1))
  128.     )
  129.     ; Now the white interior
  130.     (gimp-context-set-background '(255 255 255))
  131.     (gimp-edit-bucket-fill bump-layer BG-BUCKET-FILL NORMAL-MODE
  132.                            100 0 FALSE 0 0)
  133.  
  134.     ;------------------------------------------------------------
  135.     ;
  136.     ; Do the bump.
  137.     ;
  138.     (gimp-selection-none image)
  139.  
  140.     ; To further lessen jaggies?
  141.     ;(plug-in-gauss-rle RUN-NONINTERACTIVE image bump-layer thickness TRUE TRUE)
  142.  
  143.  
  144.     ;
  145.     ; BUMPMAP INVOCATION:
  146.     ;
  147.     (plug-in-bump-map RUN-NONINTERACTIVE image pic-layer bump-layer 125 45 3 0 0 0 0 TRUE FALSE 1)
  148.  
  149.     ;------------------------------------------------------------
  150.     ;
  151.     ; Restore things
  152.     ;
  153.     (if (= selection-exists 0)
  154.         (gimp-selection-none image)        ; No selection to start with
  155.         (gimp-selection-load selection)
  156.     )
  157.     ; If they started with a selection, they can Select->Invert then
  158.     ; Edit->Clear for a cutout.
  159.  
  160.     ; clean up
  161.     (gimp-image-remove-channel image selection)
  162.     (if (= keep-bump-layer TRUE)
  163.         (gimp-drawable-set-visible bump-layer 0)
  164.         (gimp-image-remove-layer image bump-layer)
  165.     )
  166.  
  167.     (gimp-image-set-active-layer image pic-layer)
  168.  
  169.     ; enable undo / end undo group
  170.     (if (= work-on-copy TRUE)
  171.       (begin
  172.         (gimp-display-new image)
  173.         (gimp-image-undo-enable image)
  174.       )
  175.       (gimp-image-undo-group-end image)
  176.     )
  177.  
  178.     (gimp-displays-flush)
  179.  
  180.     (gimp-context-pop)
  181.   )
  182. )
  183.  
  184. (script-fu-register "script-fu-add-bevel"
  185.   _"Add B_evel..."
  186.   _"Add a beveled border to an image"
  187.   "Andrew Donkin <ard@cs.waikato.ac.nz>"
  188.   "Andrew Donkin"
  189.   "1997/11/06"
  190.   "RGB*"
  191.   SF-IMAGE       "Image"           0
  192.   SF-DRAWABLE    "Drawable"        0
  193.   SF-ADJUSTMENT _"Thickness"       '(5 0 30 1 2 0 0)
  194.   SF-TOGGLE     _"Work on copy"    TRUE
  195.   SF-TOGGLE     _"Keep bump layer" FALSE
  196. )
  197.  
  198. (script-fu-menu-register "script-fu-add-bevel" "<Image>/Filters/Decor")
  199.